home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / files / articulo.t26 < prev    next >
Encoding:
Text File  |  1997-02-06  |  5.5 KB  |  107 lines

  1. ε                        RATON        π
  2.  
  3.         Me he decidido a escribir este artículo, porque mucha gente queda
  4. alucinada al ver algun trabajo que soporte ratón, cuando es una de las cosas
  5. más fáciles de hacer, y además muy efectiva, ya que da un toque de 
  6. profesionalidad a nuestros programas con el mínimo esfuerzo.
  7.         Cuando encendemos el ordenador, el driver del ratón se instala en 
  8. la interrupción Γ33hπ de la tabla de interrupciones. Por lo tanto, para
  9. accder a las muchas funciones que nos proporciona el driver, sólo tendremos
  10. que poner en los registros los valores adecuados y llamar a la 
  11. interrupción. (Si no sabéis que es la tabla de interrupciones, da igual,
  12. tampoco necesitais saberlo).
  13.         Para empezar, usaremos la función Γ00hπ. Para llamarla, sólo tenemos 
  14. que poner { φmov ax,00hπ
  15.             φint 33hπ   } El nº de la función siempre en ΓAXπ y al finalizar
  16.             siempre llamar a la int Γ33πh
  17. Esta función hace un reset del ratón y nos devuelve dos valores: en Γaxπ, 
  18. devuelve ∩FFFFhπ si hay un ratón instalado, y en Γbxπ el ∩nº de botonesπ que tiene.
  19.         Una vez sabemos que el usuario tiene un ratón instalado, tenemos
  20. dos funciones para esconder o mostrar el cursor del ratón (si no lo cambiamos
  21. mostrará la flecha en modo gráfico y el rectángulo en modo texto).
  22. Para ver el ratón usaremos la función Γ1hπ (seguro que ya sabéis llamarla:
  23. φmov ax,01h; int 33hπ) y para esconderlo, la función Γ2hπ. Aunque el ratón no 
  24. se vea, se sigue actualizando su posición.
  25.         Otras funciones interesantes, de las que muchas que tenemos són:
  26. δPoner el ratón en una determinada posición π
  27. Γ        función:0004hπ
  28. Γ        cx=posx π
  29. Γ        dx=posy π   
  30. δLimitar el movimiento del ratón horizontalmenteπ
  31. Γ        Función:0007hπ
  32. Γ        cx,minxπ
  33. Γ        dx,maxxπ
  34. δLimitar verticalmenteπ
  35. Γ        Función:0008hπ
  36. Γ        cx,minyπ
  37. Γ        dx,maxyπ
  38.  
  39.         Ahora, para empezar a utilizar el ratón, sólo nos queda por ver la 
  40. función que nos permitirá conocer su posición y si los botones están 
  41. apretados. Esta función es la Γ03hπ, y nos devuelve cada vez que la llamamos:
  42. φ        CX= posición x de la rataπ
  43. φ        DX= posición y de la rataπ
  44. φ        BX= Sus tres últimos bits (lsb) indican el estado de los botones.π
  45. ΩBit 0= botón izquierdo   bit 1=botón derecho    bit 2=botón centralπ
  46.  
  47. Estos bits se ponen a uno cuando el botón está apretado, o sea que si bx 
  48. vale 1 está apretado el botón izquierdo, si vale dos el derecho, si tres
  49. el izquierdo y el derecho al mismo tiempo...
  50.         Tenemos que estar atentos a las coordenadas devueltas en ΓCXπ y ΓDXπ,
  51. ya que están en mickeys, que es la unidad de medida del ratón. Depende de que
  52. modo estemos utilizando, tendremos que hacer una conversión a nuestras
  53. coordenadas (por ejemplo en modo texto, tendremos que dividir las 
  54. coordenadas por ocho, o lo que es lo mismo desplazar los registros tres bits
  55. a la derecha).
  56.      Ahora que ya podemos utilizar el ratón en nuestras apliaciones, vamos
  57. a ver otra manera de controlar el ratón más avanzada,y lógicamente más 
  58. difícil.
  59.        Veremos como controlar el ratón mediante interrupción, con este 
  60. método conseguimos, que el ratón actualize su posición automáticamente, 
  61. y no tengamos  que ir preguntando con la función anterior (método polling). 
  62. Mediante este método podemos hacer que una función nuestra sea llamada por
  63. el driver del ratón cada vez que pase un suceso determinado. Esta función
  64. nuestra será la que actualizará las posiciones,y todas las demás cosas que
  65. queramos. Para hacer esto primero tendremos que instalar un controlador de
  66. eventos, al que tenemos que decir la función a la que queremos que llame 
  67. y cuando tiene que llamarla.
  68. Γ        Función : 0Chπ
  69. φ        ES:DX : segmento y desplazamiento de nuestra funciónπ
  70. φ        CX: máscara de eventosπ
  71. φ        Significado de la máscaraπ
  72. φ        bit 0: movimiento del ratónπ
  73. φ        bit 1: pulsado botón izquierdoπ
  74. φ        bit 2: soltado botón izquierdoπ
  75. φ        bit 3: pulsado botón derecho π
  76. φ        bit 4: soltado botón derechoπ
  77. φ        bit 5: pulsado botón central π
  78. φ        bit 6: soltado botón centralπ
  79.         Como siempre se pueden hacer combinaciones, por ejemplo si ponemos
  80. cx=7 (1+2+4) nuestra función será llamada siempre que el ratón se mueva, o
  81. se pulse o suelte el botón izquierdo.
  82.         Este controlador que hemos instalado, cada vez que llame a nuestra
  83. función, le pasará la siguiente información: en ΓAXπ tendremos información
  84. de los sucesos por los que ha sido llamada nuestra función y de otros sucesos
  85. que se hayan podido producir, con el mismo  significado que la máscara 
  86. de ΓCXπ que hemos visto antes. En ΓCXπ la posición X, en ΓDXπ la Y y en ΓBXπ 
  87. el estado de los botones.
  88.         Antes de acabar el programa tenemos que desinstalar el controlador,
  89. para hacer esto, lo más fácil és copiar la rutina de instalación, pero
  90. poniendo en CX un 0, así conseguimos que nuestra función no sea llamada nunca.
  91.  
  92.  
  93.         Espero que os hayais enterado de algo y que os sea útil.
  94.         Si tenéis alguna duda o comentario, podeís escribir a 
  95.  τ              cabsagjo@eupmt.upc.esπ
  96. τ                 (eupmt=esculea universitaria politécnica de Mataró,π
  97. τ                 un poco de publicidad no va a hacer daño a nadie)  π
  98.                  
  99.                  oε Jordi Cabotπ
  100. ε                   C/Josep Sabater 3π
  101. ε                   08301 Mataróπ
  102. ε                   Barcelonaπ
  103.  
  104.  
  105. * Os pongo un ejemplo donde se ven algunas de las funciones explicadas,
  106. y el tema del controlador (lo teneis en el directorio "δratonπ").
  107.